<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    .div{
        position: sticky;
        background-color: red;
        width: 200px;
        height: 300px;
    }
    .div2{
        position: sticky;
        background-color: green;
        width: 200px;
        height: 1300px;
    }
</style>
<body>
        <div class="div"></div>
        <div class="div2"></div>
    <script>

        // // var arr = new Array(1,2,3,4)
        // // var arr = [11,22,33,44]
        // // for(let i = 0 ; i<arr.length-1;i++){
        // //     console.log(i);
        // // }

        // // arr.forEach((item,index)=>{
        // //     console.log('map',typeof item,typeof index);
        // // })

        // // for(let i in  arr){
        // //     console.log('for in' , typeof i , arr[i]);
        // // }
        // // for(let i of arr){
        // //     console.log('for of' , typeof i , i);
        // // }


        // // var arr = [11,22,33,44]
        // // var brr = [12,12,12,12,12]

        // // console.log('====================================');
        // // console.log(  arr.concat(brr));
        // // console.log('====================================');

        // // var newArr = [...arr,...brr]
        // // console.log(newArr)

        // const a = 'lllllllllllllllllllllllllll'

        // var b = {
        //     name: 'lidaq',
        //     age: '18',
        //     add: (age1, age2) => {
        //         return age1 + age2
        //     },
        //     [a]: function (age1, age2) {
        //         return age1 + age2
        //     }
        // }
        // var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        // console.log(arr);
        // setTimeout(()=>{

        //     arr.forEach((item, index) => {
        //     arr[index] = {
        //         name: 'lidaq',
        //         age: '18',
        //         add: (age1, age2) => {
        //             return age1 + age2
        //         },
        //         [index]: function (age1, age2) {
        //             return age1 + age2
        //         }
        //     }
        // })
        // console.log(arr);
        // },10)


        // console.log('====================================');
        // console.log(arr.length = 0);
        // console.log('====================================');

        // var a = 10
        // if(a===0){
        //     console.log(a);
        // }else if(a===1){

        // }else if(1){

        // }

        // switch(a){
        //     case 1:
        //         console.log();
        //         break
        //     case 2:
        //         break
        //     case 8:
        //         break
        // }

        // var obj = {
        //    ldq:function(){
        //        console.log('ldq nb');
        //    },
        //    "ykx":()=>{
        //        console.log('ykx bnb');
        //    },
        //    "default":()=>{
        //         console.log(' default ww');
        //    },
        //    "1000":()=>{
        //        console.log(100);
        //    }
        // }

        // var arr = ['ldq','ykx','default']

        // for(var i = 0 ; i<arr.length;i++){
        //     try{
        //         obj['ww']()
        //     }catch(e){
        //         obj['default']()  
        //     }
        //     if(i===1){
        //         obj[arr[i]]()  
        //     }
        // }

        // || && 短路  
        // var ldq = 1 

        // // ldq===1 && console.log(ldq);

        // ldq || console.log(ldq);


        // 递归

        // function digui(num){
        //     if(num<=1){
        //         return num
        //     }else{
        //         return num*arguments.callee(num-1)
        //     }
        // }
        // // console.log(
        // //     digui(10)
        // // )

        // let fac = (function(num){
        //     if(num<=1){
        //         return num
        //     }else{
        //         return num*arguments.callee(num-1)
        //     }
        // })
        // fac(100)
        // console.log(fac(10));

        // 自带缓存的递归函数
        // 使用空间复杂度换取时间复杂度
        // 计算阶乘 , 并将结果缓存到函数的属性中 
        // 这个函数factorial() 使用了自身的属性 ( 将自身当作数组来对待 )

        // function factoraial(n){
        //     if(isFinite(n) && n>0 && n===Math.round(n)){ // 有限的正整数
        //         if(!(n in factoraial)){ // 如果没有缓存结果
        //             factoraial[n] = n*arguments.callee(n-1) // 计算结果并缓存 
        //         }
        //         return factoraial[n] // 返回缓存结果
        //     }else{
        //         return NaN
        //     }
        // } 
        // factoraial[1] = 1
        // console.log(factoraial(100))
        // console.log(factoraial.prototype)

        // function factoraial(num) {
        //     if (!(num in factoraial)) {
        //             // console.log(num);
        //         if (num <= 1) {
        //             return 1
        //         } else {
        //             return factoraial[num] = num * arguments.callee(num - 1)
        //         }
        //     }
        //     return factoraial[num]
        // }
        // factoraial[1]=1
        // console.log(factoraial(0))

        // 闭包 
        // var name = 'ldq'
        // var obj  = {
        //     name : 'lidaqing',
        //     getName : ()=>{
        //         return ()=>{
        //             console.log(this.name);
        //         }
        //     }
        // }
        // obj.getName()()


        // function f1(){
        //     var n = 999
        //     return function f2(){
        //         return n
        //     }
        // }
        // var func = f1()()
        // console.log(func);

        // function f1(){
        //     var n = 999
        //     add = function(){n++}
        //     function f2(){
        //         console.log(n);
        //     }
        //     return f2
        // }

        // var result = f1()
        // console.log(result());
        // add()
        // console.log(result());

        // 高阶函数
        // let even = function(x){
        //     return x%2===0
        // }
        // let odd = not(even)
        // function not(f){
        //     return function(){
        //         let result = f.apply(this,arguments) 
        //         return !result
        //     }
        // }
        // [1,2,3,4,5].every(odd)

        // function memoruze(f){
        //     var cache = {}
        //     return function(){
        //         var key = arguments.length + Array.prototype.join.call(arguments,',')
        //         if(key in cache){
        //             return cache[key]
        //         }else{
        //             return cache[key] = f.apply(this,arguments)                    
        //         }
        //     }   
        // }

        // function fn(n){
        //     if(n<=1){
        //         return 1
        //     }else{
        //         return n*factorizl(n-1)
        //     }
        // }
        // let factorizl = memoruze(fn)
        // factorizl(5)

        // 函数柯里化

        // function currying(func,args){
        //     // 形参个数, 即func需要正常运行所需要的参数个数
        //     var arity = func.length 
        //     // 在柯里化函数的是否是否传入了其他函数
        //     // 如果传入了就保存函数,没传就把参数初始化为一个空数组
        //     var args  = args || []

        //     return function(){
        //         console.log(arguments);
        //         // 将参数转化为数组
        //         var _args = [].slice.call(arguments)

        //         // 将上次的参数与当前参数进行组合并修正传参顺序
        //         Array.prototype.unshift.apply(_args,args)

        //         // 如果参数不够, 返回新的闭包函数继续收集参数
        //         if(_args.length<arity){
        //             return currying.call(null,func,_args)
        //         }
        //         // 参数够了则执行被转发的函数
        //         return func.apply(null,_args)

        //         // 之所以要用apply是因为现在的参数是一个数组, 
        //         // 而函数的执行需要把参数一个一个传入到函数
        //         // 为了简便, 我们用apply的方式来实现
        //     }
        // }

        // function local(sheng, shi, name) {
        //     console.log(name + "是" + sheng + "省" + shi + "市的人");
        // }
        // let jiuj = currying(local, ["江西", "九江"])
        // jiuj("罗汉")
        // function currying(func, args) {
        //     var arity = func.length
        //     // console.log("arity",arity);
        //     var args = args || []
        //     // console.log("args",args);
        //     return function () {
        //         let _args = [].slice.call(arguments)
        //         // console.log("_args",_args);
        //         // console.log("args",args);
        //         Array.prototype.unshift.apply(_args, args)
        //         // console.log("_args",_args);
        //         // console.log("args",args);
        //         // console.log(_args.length);
        //         if (_args.length < arity) {
        //             return currying.call(null, func, _args)
        //         }
        //         return func.apply(null, _args)
        //     }
        // }
        // function checkFun(reg,str){
        //     return reg.test(str)
        // }
        // const check = currying(checkFun)
        // const checkPhone = check(/^1[34578]\d{9}/)

        // console.log(checkPhone(11));

        
        // function ldq(a,b){
        //     console.log('====================================');
        //     console.log(a+b);
        //     console.log('===================================='); a+b
        // }
        // currying(ldq,[21,1])()


        // const arr = [11,[22,33],33,44]
        // const [arr1,arr2,arr3,arr4] = arr
        // const [ldq,ldq3,...ldq2] = [1,...arr]
        // const obj = {
        //     obj1:1,
        //     obj2:2,
        //     obj3:3,
        // }
        // const {
        //     obj1,obj3
        // } = obj
        // console.log(obj3);

        var a  =  "asdfgh" 
        // a = a.split('d')[1]
        // a = a.substring(3,6)
        // a = a[3]+a[4]+a[5]
        console.log(a);





    </script>
</body>

</html>